package com.Apo1o.Interceptor;

import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author by Apo1o
 * @implNote 2023/10/22 10:57
 */
@Configuration
@RequiredArgsConstructor
public class WebAppConfigurer implements WebMvcConfigurer {

    private final AdminInterceptor adminInterceptor;

    private final DoctorInterceptor doctorInterceptor;

    private final PatientInterceptor patientInterceptor;

    /**
     * 向Spring MVC框架注册拦截器。
     * 该方法用于配置拦截器路径，使得在访问这些路径下的资源时，会先经过对应的拦截器进行预处理。
     *
     * @param registry 用于注册拦截器的InterceptorRegistry对象，通过它来配置拦截器的拦截路径。
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 为不同的用户角色界面注册相应的拦截器，以拦截未授权的访问。
        // 拦截尝试访问管理员界面的未登录用户
        registry.addInterceptor(adminInterceptor).addPathPatterns("/admin/**");
        // 拦截尝试访问医生界面的未登录或非医生用户
        registry.addInterceptor(doctorInterceptor).addPathPatterns("/doctor/**");
        // 拦截尝试访问患者界面的未登录或非患者用户
        registry.addInterceptor(patientInterceptor).addPathPatterns("/patient/**");
    }

}
